package easier.recycler;

import java.util.ArrayList;
import java.util.List;

/**
 * @param <T> 简化单一数据类型adapter创建,只需关心数据如何展示,数据如何变化
 */
public abstract class SingleTypeAdapter< T > extends MultiTypeAdapter {

    public SingleTypeAdapter() {

        this( new ArrayList<>() );
    }

    public SingleTypeAdapter( List< ? extends T > source ) {

        convert( source );
    }

    /**
     * @param source 原始数据转换为显示数据
     */
    protected void convert( List< ? extends T > source ) {

        List< TypeViewHolder > list = new ArrayList<>();
        int size = source.size();
        for ( int i = 0; i < size; i++ ) {
            T t = source.get( i );
            list.add( buildHolder( i, t ) );
        }
        updateViewHolders( list );
    }

    /**
     * @param t 数据
     *
     * @return 展示数据
     */
    protected abstract DataViewHolder< T > buildHolder( int position, T t );

    /**
     * @param source 更新数据
     */
    public void updateSource( List< T > source ) {

        convert( source );
    }
}
